<?php

declare(strict_types=1);
/**
 * Author: Zane
 * Email: 873934580@qq.com
 * Date: 2022/4/7.
 */

namespace Zane\TableHandle;

interface IBase
{
    /**
     * 执行字段处理.
     *
     * @return mixed
     */
    public function handle();

    /**
     * 设置模型.
     *
     * @param $model
     *
     * @return $this
     */
    public function setModel($model): self;

    /**
     * 设置历史模型.
     *
     * @param $model
     *
     * @return $this
     */
    public function setOrigin($model): self;

    /**
     * [添加字段时的规则验证]获取验证规则.
     *
     * @return array
     */
    public function getRules(): array;

    /**
     * [添加字段时的规则验证]验证规则.
     *
     * @param mixed $data
     *
     * @return mixed
     */
    public function checkRule($data);

    /**
     * 解析规则 - 数据保存时的规则解析.
     *
     * @param $param
     * @param mixed $isRequired
     *
     * @return array
     */
    public function parseRule($param, $isRequired): array;

    /**
     * 数据存储时的转译处理，某些字段需要特殊处理一下才能存入到数据库中.
     *
     * @param $val
     * @param $param
     *
     * @return mixed
     */
    public function getSaveVal($val, $param);

    /**
     * 读取转译.
     *
     * @param $val
     * @param $param
     *
     * @return mixed
     */
    public function getVal($val, $param);
}
